﻿using log4net;
using PcaCore.BOL.Tareas;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace PcaCore.DAL.Tareas
{
    public class dAlerta
    {
        private static readonly ILog log = LogManager.GetLogger(typeof(dAlerta));

        #region Public

        public static long Insert(oAlerta myClass)
        {
            try
            {
                //CREATE OR REPLACE FUNCTION pca_tareas.fn_add_alerta(varchar,--empresa_id $1
                //            varchar,--oficina_id $2
                //            bigint,--sesion_id $3
                //            varchar,--usuario_id $4
                //            varchar,--mensaje $5
                //            integer,--desencadenador_id $6
                //            integer[],--meses $7
                //            integer[] --dias $8
                //            )RETURNS bigint
                object id = Core.ExecuteScalar("pca.fn_add_alerta",
                                               new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, myClass.empresa_id),
                                               new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, myClass.oficina_id),
                                               new oParametro(NpgsqlTypes.NpgsqlDbType.Bigint, myClass.sesion_id),
                                               new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, myClass.usuario_id),
                                               new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, myClass.mensaje),
                                               new oParametro(NpgsqlTypes.NpgsqlDbType.Integer, myClass.desencadenador_id),
                                               new oParametro(NpgsqlTypes.NpgsqlDbType.Array | NpgsqlTypes.NpgsqlDbType.Integer, myClass.meses),
                                               new oParametro(NpgsqlTypes.NpgsqlDbType.Array | NpgsqlTypes.NpgsqlDbType.Integer, myClass.dias));

                return Convert.ToInt64(id);
            }
            catch (Exception ex)
            {
                throw Core.LogException(log, ex, MethodBase.GetCurrentMethod().Name);
            }
        }

        public static void Update(oAlerta myClass)
        {
            try
            {
                //CREATE OR REPLACE FUNCTION pca_tareas.fn_update_alerta(varchar,--empresa_id $1
                //               varchar,--oficina_id $2
                //               bigint,--alerta_id $3
                //               bigint,--sesion_id $4
                //               varchar,--mensaje $5
                //               integer,--desencadenador_id $6
                //               integer[],--meses $7
                //               integer[] --dias $8
                //               )RETURNS void
                Core.ExecuteNonQuery("pca.fn_update_alerta",
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, myClass.empresa_id),
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, myClass.oficina_id),
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Bigint, myClass.alerta_id),
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Bigint, myClass.sesion_id),
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, myClass.mensaje),
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Integer, myClass.desencadenador_id),
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Boolean, myClass.activo),
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Array | NpgsqlTypes.NpgsqlDbType.Integer, myClass.meses),
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Array | NpgsqlTypes.NpgsqlDbType.Integer, myClass.dias));
            }
            catch (Exception ex)
            {
                throw Core.LogException(log, ex, MethodBase.GetCurrentMethod().Name);
            }
        }

        public static void Delete(string empresaId,
                                  string oficinaId,
                                  long alertaId)
        {
            try
            {
                //CREATE OR REPLACE FUNCTION pca.fn_delete_alerta(varchar,--empresa_id $1
                //        varchar,--oficina_id $2
                //        bigint --alerta_id $3
                //        )RETURNS void
                Core.ExecuteNonQuery("pca.fn_delete_alerta",
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, empresaId),
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, oficinaId),
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Bigint, alertaId));
            }
            catch (Exception ex)
            {
                throw Core.LogException(log, ex, MethodBase.GetCurrentMethod().Name);
            }
        }

        public static List<oVwAlerta> GetList(int start,
                                              int limit,
                                              out int totalRecords,
                                              string empresaId,
                                              string oficinaId)
        {
            try
            {
                //CREATE OR REPLACE FUNCTION pca_tareas.fn_get_list_alertas(integer,--start $1
                //              integer,--limit $2
                //              varchar,--empresa_id $3
                //              varchar --oficina_id $4
                //              )RETURNS SETOF refcursor
                return Core.GetListObjecstDb<oVwAlerta>("pca_tareas.fn_get_list_alertas",
                                                         out totalRecords,
                                                         new oParametro(NpgsqlTypes.NpgsqlDbType.Integer, start),
                                                         new oParametro(NpgsqlTypes.NpgsqlDbType.Integer, limit),
                                                         new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, empresaId),
                                                         new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, oficinaId));
            }
            catch (Exception ex)
            {
                throw Core.LogException(log, ex, MethodBase.GetCurrentMethod().Name);
            }
        }

        public static List<oVwAlerta> GetListDia(int start,
                                                 int limit,
                                                 out int totalRecords,
                                                 string empresaId,
                                                 string oficinaId)
        {
            try
            {
                //CREATE OR REPLACE FUNCTION pca_tareas.fn_get_list_alertas_dia(integer,--start $1
                //                  integer,--limit $2
                //                  varchar,--empresa_id $3
                //                  varchar --oficina_id $4
                //                  )RETURNS SETOF refcursor
                return Core.GetListObjecstDb<oVwAlerta>("pca_tareas.fn_get_list_alertas_dia",
                                                         out totalRecords,
                                                         new oParametro(NpgsqlTypes.NpgsqlDbType.Integer, start),
                                                         new oParametro(NpgsqlTypes.NpgsqlDbType.Integer, limit),
                                                         new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, empresaId),
                                                         new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, oficinaId));
            }
            catch (Exception ex)
            {
                throw Core.LogException(log, ex, MethodBase.GetCurrentMethod().Name);
            }
        }

        #endregion
    }
}
